package com.ads.tpgrupo4.domain.cpr.proveedores;

import java.util.List;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import com.ads.tpgrupo4.domain.cpr.core.PersistentObject;
import com.ads.tpgrupo4.domain.cpr.core.Status;
import com.ads.tpgrupo4.domain.cpr.cotizacion.Vigencia;
import com.ads.tpgrupo4.domain.cpr.utils.DateUtils;

@Entity
public class ListaDePrecios extends PersistentObject {
	
	private static final long serialVersionUID = 2841238571727377412L;

	private Long numero;
	
	private TipoListaDePrecios tipo;
	
	@Enumerated(EnumType.ORDINAL)
	private Status status;

	@Embedded
	@AttributeOverrides( {
		@AttributeOverride(name="fecha", column = @Column(name="fecha_inicio_vigencia") ),
		@AttributeOverride(name="termino", column = @Column(name="dias_vigencia") )
		} )
	private Vigencia vigencia;
	
	@OneToOne
	private Proveedor proveedor;
	
	@OneToOne
	private ListaDePrecios listaReemplazada;
	
	@OneToMany(cascade = {CascadeType.ALL} )
	private List<ItemListaDePrecios> items;
	
	public Proveedor getProveedor() {
		return proveedor;
	}
	
	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}
	
	public Long getNumero() {
		return numero;
	}
	
	public void setNumero(Long numero) {
		this.numero = numero;
	}
	
	public TipoListaDePrecios getTipo() {
		return tipo;
	}
	
	public void setTipo(TipoListaDePrecios tipo) {
		this.tipo = tipo;
	}

	public List<ItemListaDePrecios> getItems() {
		return items;
	}

	public void setItems(List<ItemListaDePrecios> items) {
		this.items = items;
	}

	public ListaDePrecios getListaReemplazada() {
		return listaReemplazada;
	}

	public void setListaReemplazada(ListaDePrecios listaReemplazada) {
		this.listaReemplazada = listaReemplazada;
	}

	public Vigencia getVigencia() {
		return vigencia;
	}

	public void setVigencia(Vigencia vigencia) {
		this.vigencia = vigencia;
	}
	
	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}
	
	public boolean estaEnVigencia() {
	
		return DateUtils.estaEnVigencia(DateUtils.now(), this.vigencia);
	}

}
